package com.mytrans.transaction;

import com.mytrans.util.JsonType;

public interface TransactionExecutor<T> {

    /**
     * 需要执行的预扣款任务
     * @param t
     */
    void task(T t) throws Exception;

    /**
     * 执行的回滚任务
     * @param t
     */
    void rollBack(T t) throws Exception;

    /**
     * 执行的提交任务
     * @param t
     */
    void commit(T t) throws Exception;
    /**
     * 获取任务key
     */
    String getKey();
    /**
     * 获取参数的类型
     */
    JsonType<T> getParamType();

    /**
     * 真正执行事务预扣使用
     * @param t
     */
    void excuteTask(T t) throws Exception;

    /**
     * 真正执行事务的回滚使用
     * @param t
     */
    void excuteRollBack(T t, String token) throws Exception;

    /**
     * 真正进行执行事务的提交使用
     * @param t
     */
    void excuteCommit(T t, String token) throws Exception;
}
